//
//  KKTextView.swift
//  SinaWeiBo
//
//  Created by King.Kong. on 16/6/4.
//  Copyright © 2016年 King.Kong. All rights reserved.
//

import UIKit

class KKTextView: UITextView {

    func insertEmoticon(em: KKEmoticon) {
        //如果点击的空白的模型
        if em.isEmpty {
            return
        }
        
        //点击删除按钮
        if em.isDelete {
            //执行回删
            deleteBackward()
            return
        }
        
        //点击的是emoji表情
        if em.emoji != nil {
            //替换字符串到对应的光标下
            replaceRange(selectedTextRange!, withText: em.emoji ?? "")
            return
        }
        
        //程序走到这个地方 意味用户点击的是 表情图片
        //实现图文混排 要依靠属性字符串
        //将图片添加到属性文本中 需要使用 附件  对象
        //1.获取附件对象
        
        let imageText = KKTextAttachment.emoticonImageToImageText(em, font: font!)
        //4. 将textView.attributedText 转换为可变的属性文本
        let strM = NSMutableAttributedString(attributedString: attributedText)
        
        //5.1 在替换之前 记录光标所在位置
        let range = selectedRange
        //5.2替换属性文本
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        //6.重新设置textView.attributedText
        attributedText = strM
        //7. 恢复光标的位置
        selectedRange = NSMakeRange(range.location + 1, 0)
        
        //主动调用协议方法
        self.delegate?.textViewDidChange?(self)
    }
    
    
    //获取 普通文本 + 图片对应的chs
    func fullText() -> String{
        let attr = attributedText
        var strM = String()
        attr.enumerateAttributesInRange(NSMakeRange(0, attr.length), options: []) { (dict, range, _) in
            
            if let attachment = dict["NSAttachment"] as? KKTextAttachment {
                strM += (attachment.chs ?? "")
            } else {
                //正常的属性文本
                let subStr = (self.text as NSString).substringWithRange(range)
                strM += subStr
            }
        }
        return strM
    }

}
